//! 数学符号字符集
//! 
//! 包含各种数学符号、运算符、几何图形等

use std::collections::HashMap;
use crate::CharacterSet;

/// 获取数学相关字符集
pub fn get_math_characters() -> HashMap<String, CharacterSet> {
    let mut characters = HashMap::new();

    // 基本运算符
    characters.insert("plus".to_string(),
        CharacterSet::new()
            .simple("+")
            .icon("➕")
            .bold("+")
    );

    characters.insert("add".to_string(),
        CharacterSet::new()
            .simple("+")
            .icon("➕")
            .bold("+")
    );

    characters.insert("minus".to_string(),
        CharacterSet::new()
            .simple("−")
            .icon("➖")
            .bold("−")
    );

    characters.insert("subtract".to_string(),
        CharacterSet::new()
            .simple("−")
            .icon("➖")
            .bold("−")
    );

    characters.insert("multiply".to_string(),
        CharacterSet::new()
            .simple("×")
            .icon("✖")
            .bold("×")
    );

    characters.insert("times".to_string(),
        CharacterSet::new()
            .simple("×")
            .icon("✖")
            .bold("×")
    );

    characters.insert("divide".to_string(),
        CharacterSet::new()
            .simple("÷")
            .icon("➗")
            .bold("÷")
    );

    characters.insert("division".to_string(),
        CharacterSet::new()
            .simple("÷")
            .icon("➗")
            .bold("÷")
    );

    characters.insert("equals".to_string(),
        CharacterSet::new()
            .simple("=")
            .icon("=")
            .bold("=")
    );

    characters.insert("equal".to_string(),
        CharacterSet::new()
            .simple("=")
            .icon("=")
            .bold("=")
    );

    // 比较运算符
    characters.insert("greater_than".to_string(),
        CharacterSet::new()
            .simple(">")
            .icon(">")
            .bold(">")
    );

    characters.insert("less_than".to_string(),
        CharacterSet::new()
            .simple("<")
            .icon("<")
            .bold("<")
    );

    characters.insert("greater_equal".to_string(),
        CharacterSet::new()
            .simple("≥")
            .icon("≥")
            .bold("≥")
    );

    characters.insert("less_equal".to_string(),
        CharacterSet::new()
            .simple("≤")
            .icon("≤")
            .bold("≤")
    );

    characters.insert("not_equal".to_string(),
        CharacterSet::new()
            .simple("≠")
            .icon("≠")
            .bold("≠")
    );

    characters.insert("approximately".to_string(),
        CharacterSet::new()
            .simple("≈")
            .icon("≈")
            .bold("≈")
    );

    // 集合符号
    characters.insert("union".to_string(),
        CharacterSet::new()
            .simple("∪")
            .icon("∪")
            .bold("∪")
    );

    characters.insert("intersection".to_string(),
        CharacterSet::new()
            .simple("∩")
            .icon("∩")
            .bold("∩")
    );

    characters.insert("subset".to_string(),
        CharacterSet::new()
            .simple("⊂")
            .icon("⊂")
            .bold("⊂")
    );

    characters.insert("superset".to_string(),
        CharacterSet::new()
            .simple("⊃")
            .icon("⊃")
            .bold("⊃")
    );

    characters.insert("element_of".to_string(),
        CharacterSet::new()
            .simple("∈")
            .icon("∈")
            .bold("∈")
    );

    characters.insert("not_element_of".to_string(),
        CharacterSet::new()
            .simple("∉")
            .icon("∉")
            .bold("∉")
    );

    characters.insert("empty_set".to_string(),
        CharacterSet::new()
            .simple("∅")
            .icon("∅")
            .bold("∅")
    );

    characters.insert("null_set".to_string(),
        CharacterSet::new()
            .simple("∅")
            .icon("∅")
            .bold("∅")
    );

    // 逻辑运算符
    characters.insert("and".to_string(),
        CharacterSet::new()
            .simple("∧")
            .icon("∧")
            .bold("∧")
    );

    characters.insert("or".to_string(),
        CharacterSet::new()
            .simple("∨")
            .icon("∨")
            .bold("∨")
    );

    characters.insert("not".to_string(),
        CharacterSet::new()
            .simple("¬")
            .icon("¬")
            .bold("¬")
    );

    characters.insert("implies".to_string(),
        CharacterSet::new()
            .simple("⇒")
            .icon("⇒")
            .bold("⇒")
    );

    characters.insert("iff".to_string(),
        CharacterSet::new()
            .simple("⇔")
            .icon("⇔")
            .bold("⇔")
    );

    characters.insert("for_all".to_string(),
        CharacterSet::new()
            .simple("∀")
            .icon("∀")
            .bold("∀")
    );

    characters.insert("exists".to_string(),
        CharacterSet::new()
            .simple("∃")
            .icon("∃")
            .bold("∃")
    );

    // 微积分符号
    characters.insert("integral".to_string(),
        CharacterSet::new()
            .simple("∫")
            .icon("∫")
            .bold("∫")
    );

    characters.insert("partial_derivative".to_string(),
        CharacterSet::new()
            .simple("∂")
            .icon("∂")
            .bold("∂")
    );

    characters.insert("derivative".to_string(),
        CharacterSet::new()
            .simple("d")
            .icon("d")
            .bold("d")
    );

    characters.insert("limit".to_string(),
        CharacterSet::new()
            .simple("lim")
            .icon("lim")
            .bold("lim")
    );

    characters.insert("infinity".to_string(),
        CharacterSet::new()
            .simple("∞")
            .icon("∞")
            .bold("∞")
    );

    characters.insert("infinite".to_string(),
        CharacterSet::new()
            .simple("∞")
            .icon("∞")
            .bold("∞")
    );

    // 希腊字母（完整）
    // 大写希腊字母
    characters.insert("alpha".to_string(),
        CharacterSet::new()
            .simple("α")
            .icon("α")
            .bold("α")
    );

    characters.insert("beta".to_string(),
        CharacterSet::new()
            .simple("β")
            .icon("β")
            .bold("β")
    );

    characters.insert("gamma".to_string(),
        CharacterSet::new()
            .simple("γ")
            .icon("γ")
            .bold("γ")
    );

    characters.insert("delta".to_string(),
        CharacterSet::new()
            .simple("δ")
            .icon("δ")
            .bold("δ")
    );

    characters.insert("epsilon".to_string(),
        CharacterSet::new()
            .simple("ε")
            .icon("ε")
            .bold("ε")
    );

    characters.insert("zeta".to_string(),
        CharacterSet::new()
            .simple("ζ")
            .icon("ζ")
            .bold("ζ")
    );

    characters.insert("eta".to_string(),
        CharacterSet::new()
            .simple("η")
            .icon("η")
            .bold("η")
    );

    characters.insert("theta".to_string(),
        CharacterSet::new()
            .simple("θ")
            .icon("θ")
            .bold("θ")
    );

    characters.insert("iota".to_string(),
        CharacterSet::new()
            .simple("ι")
            .icon("ι")
            .bold("ι")
    );

    characters.insert("kappa".to_string(),
        CharacterSet::new()
            .simple("κ")
            .icon("κ")
            .bold("κ")
    );

    characters.insert("lambda".to_string(),
        CharacterSet::new()
            .simple("λ")
            .icon("λ")
            .bold("λ")
    );

    characters.insert("mu".to_string(),
        CharacterSet::new()
            .simple("μ")
            .icon("μ")
            .bold("μ")
    );

    characters.insert("nu".to_string(),
        CharacterSet::new()
            .simple("ν")
            .icon("ν")
            .bold("ν")
    );

    characters.insert("xi".to_string(),
        CharacterSet::new()
            .simple("ξ")
            .icon("ξ")
            .bold("ξ")
    );

    characters.insert("omicron".to_string(),
        CharacterSet::new()
            .simple("ο")
            .icon("ο")
            .bold("ο")
    );

    characters.insert("pi".to_string(),
        CharacterSet::new()
            .simple("π")
            .icon("π")
            .bold("π")
    );

    characters.insert("rho".to_string(),
        CharacterSet::new()
            .simple("ρ")
            .icon("ρ")
            .bold("ρ")
    );

    characters.insert("sigma".to_string(),
        CharacterSet::new()
            .simple("σ")
            .icon("σ")
            .bold("σ")
    );

    characters.insert("tau".to_string(),
        CharacterSet::new()
            .simple("τ")
            .icon("τ")
            .bold("τ")
    );

    characters.insert("upsilon".to_string(),
        CharacterSet::new()
            .simple("υ")
            .icon("υ")
            .bold("υ")
    );

    characters.insert("phi".to_string(),
        CharacterSet::new()
            .simple("φ")
            .icon("φ")
            .bold("φ")
    );

    characters.insert("chi".to_string(),
        CharacterSet::new()
            .simple("χ")
            .icon("χ")
            .bold("χ")
    );

    characters.insert("psi".to_string(),
        CharacterSet::new()
            .simple("ψ")
            .icon("ψ")
            .bold("ψ")
    );

    characters.insert("omega".to_string(),
        CharacterSet::new()
            .simple("ω")
            .icon("ω")
            .bold("ω")
    );

    // 大写希腊字母
    characters.insert("alpha_capital".to_string(),
        CharacterSet::new()
            .simple("Α")
            .icon("Α")
            .bold("Α")
    );

    characters.insert("beta_capital".to_string(),
        CharacterSet::new()
            .simple("Β")
            .icon("Β")
            .bold("Β")
    );

    characters.insert("gamma_capital".to_string(),
        CharacterSet::new()
            .simple("Γ")
            .icon("Γ")
            .bold("Γ")
    );

    characters.insert("delta_capital".to_string(),
        CharacterSet::new()
            .simple("Δ")
            .icon("Δ")
            .bold("Δ")
    );

    characters.insert("epsilon_capital".to_string(),
        CharacterSet::new()
            .simple("Ε")
            .icon("Ε")
            .bold("Ε")
    );

    characters.insert("zeta_capital".to_string(),
        CharacterSet::new()
            .simple("Ζ")
            .icon("Ζ")
            .bold("Ζ")
    );

    characters.insert("eta_capital".to_string(),
        CharacterSet::new()
            .simple("Η")
            .icon("Η")
            .bold("Η")
    );

    characters.insert("theta_capital".to_string(),
        CharacterSet::new()
            .simple("Θ")
            .icon("Θ")
            .bold("Θ")
    );

    characters.insert("iota_capital".to_string(),
        CharacterSet::new()
            .simple("Ι")
            .icon("Ι")
            .bold("Ι")
    );

    characters.insert("kappa_capital".to_string(),
        CharacterSet::new()
            .simple("Κ")
            .icon("Κ")
            .bold("Κ")
    );

    characters.insert("lambda_capital".to_string(),
        CharacterSet::new()
            .simple("Λ")
            .icon("Λ")
            .bold("Λ")
    );

    characters.insert("mu_capital".to_string(),
        CharacterSet::new()
            .simple("Μ")
            .icon("Μ")
            .bold("Μ")
    );

    characters.insert("nu_capital".to_string(),
        CharacterSet::new()
            .simple("Ν")
            .icon("Ν")
            .bold("Ν")
    );

    characters.insert("xi_capital".to_string(),
        CharacterSet::new()
            .simple("Ξ")
            .icon("Ξ")
            .bold("Ξ")
    );

    characters.insert("omicron_capital".to_string(),
        CharacterSet::new()
            .simple("Ο")
            .icon("Ο")
            .bold("Ο")
    );

    characters.insert("pi_capital".to_string(),
        CharacterSet::new()
            .simple("Π")
            .icon("Π")
            .bold("Π")
    );

    characters.insert("rho_capital".to_string(),
        CharacterSet::new()
            .simple("Ρ")
            .icon("Ρ")
            .bold("Ρ")
    );

    characters.insert("sigma_capital".to_string(),
        CharacterSet::new()
            .simple("Σ")
            .icon("Σ")
            .bold("Σ")
    );

    characters.insert("tau_capital".to_string(),
        CharacterSet::new()
            .simple("Τ")
            .icon("Τ")
            .bold("Τ")
    );

    characters.insert("upsilon_capital".to_string(),
        CharacterSet::new()
            .simple("Υ")
            .icon("Υ")
            .bold("Υ")
    );

    characters.insert("phi_capital".to_string(),
        CharacterSet::new()
            .simple("Φ")
            .icon("Φ")
            .bold("Φ")
    );

    characters.insert("chi_capital".to_string(),
        CharacterSet::new()
            .simple("Χ")
            .icon("Χ")
            .bold("Χ")
    );

    characters.insert("psi_capital".to_string(),
        CharacterSet::new()
            .simple("Ψ")
            .icon("Ψ")
            .bold("Ψ")
    );

    characters.insert("omega_capital".to_string(),
        CharacterSet::new()
            .simple("Ω")
            .icon("Ω")
            .bold("Ω")
    );

    // 希腊字母别名（常用名称）
    characters.insert("alpha_a".to_string(),
        CharacterSet::new()
            .simple("α")
            .icon("α")
            .bold("α")
    );

    characters.insert("beta_b".to_string(),
        CharacterSet::new()
            .simple("β")
            .icon("β")
            .bold("β")
    );

    characters.insert("gamma_g".to_string(),
        CharacterSet::new()
            .simple("γ")
            .icon("γ")
            .bold("γ")
    );

    characters.insert("delta_d".to_string(),
        CharacterSet::new()
            .simple("δ")
            .icon("δ")
            .bold("δ")
    );

    characters.insert("epsilon_e".to_string(),
        CharacterSet::new()
            .simple("ε")
            .icon("ε")
            .bold("ε")
    );

    characters.insert("theta_th".to_string(),
        CharacterSet::new()
            .simple("θ")
            .icon("θ")
            .bold("θ")
    );

    characters.insert("lambda_l".to_string(),
        CharacterSet::new()
            .simple("λ")
            .icon("λ")
            .bold("λ")
    );

    characters.insert("mu_m".to_string(),
        CharacterSet::new()
            .simple("μ")
            .icon("μ")
            .bold("μ")
    );

    characters.insert("pi_p".to_string(),
        CharacterSet::new()
            .simple("π")
            .icon("π")
            .bold("π")
    );

    characters.insert("sigma_s".to_string(),
        CharacterSet::new()
            .simple("σ")
            .icon("σ")
            .bold("σ")
    );

    characters.insert("phi_f".to_string(),
        CharacterSet::new()
            .simple("φ")
            .icon("φ")
            .bold("φ")
    );

    characters.insert("omega_w".to_string(),
        CharacterSet::new()
            .simple("ω")
            .icon("ω")
            .bold("ω")
    );

    // 几何符号
    characters.insert("angle".to_string(),
        CharacterSet::new()
            .simple("∠")
            .icon("∠")
            .bold("∠")
    );

    characters.insert("right_angle".to_string(),
        CharacterSet::new()
            .simple("∟")
            .icon("∟")
            .bold("∟")
    );

    characters.insert("triangle".to_string(),
        CharacterSet::new()
            .simple("△")
            .icon("△")
            .bold("△")
    );

    characters.insert("square".to_string(),
        CharacterSet::new()
            .simple("□")
            .icon("□")
            .bold("□")
    );

    characters.insert("circle".to_string(),
        CharacterSet::new()
            .simple("○")
            .icon("○")
            .bold("○")
    );

    characters.insert("diameter".to_string(),
        CharacterSet::new()
            .simple("∅")
            .icon("∅")
            .bold("∅")
    );

    characters.insert("radius".to_string(),
        CharacterSet::new()
            .simple("r")
            .icon("r")
            .bold("r")
    );

    // 统计符号
    characters.insert("sum".to_string(),
        CharacterSet::new()
            .simple("∑")
            .icon("∑")
            .bold("∑")
    );

    characters.insert("product".to_string(),
        CharacterSet::new()
            .simple("∏")
            .icon("∏")
            .bold("∏")
    );

    characters.insert("factorial".to_string(),
        CharacterSet::new()
            .simple("!")
            .icon("!")
            .bold("!")
    );

    characters.insert("mean".to_string(),
        CharacterSet::new()
            .simple("x̄")
            .icon("x̄")
            .bold("x̄")
    );

    characters.insert("average".to_string(),
        CharacterSet::new()
            .simple("x̄")
            .icon("x̄")
            .bold("x̄")
    );

    characters.insert("standard_deviation".to_string(),
        CharacterSet::new()
            .simple("σ")
            .icon("σ")
            .bold("σ")
    );

    characters.insert("variance".to_string(),
        CharacterSet::new()
            .simple("σ²")
            .icon("σ²")
            .bold("σ²")
    );

    // 分数和根号
    characters.insert("square_root".to_string(),
        CharacterSet::new()
            .simple("√")
            .icon("√")
            .bold("√")
    );

    characters.insert("cube_root".to_string(),
        CharacterSet::new()
            .simple("∛")
            .icon("∛")
            .bold("∛")
    );

    characters.insert("nth_root".to_string(),
        CharacterSet::new()
            .simple("∜")
            .icon("∜")
            .bold("∜")
    );

    characters.insert("fraction".to_string(),
        CharacterSet::new()
            .simple("½")
            .icon("½")
            .bold("½")
    );

    characters.insert("half".to_string(),
        CharacterSet::new()
            .simple("½")
            .icon("½")
            .bold("½")
    );

    characters.insert("quarter".to_string(),
        CharacterSet::new()
            .simple("¼")
            .icon("¼")
            .bold("¼")
    );

    characters.insert("three_quarters".to_string(),
        CharacterSet::new()
            .simple("¾")
            .icon("¾")
            .bold("¾")
    );

    // 百分比和度数
    characters.insert("percent".to_string(),
        CharacterSet::new()
            .simple("%")
            .icon("%")
            .bold("%")
    );

    characters.insert("permille".to_string(),
        CharacterSet::new()
            .simple("‰")
            .icon("‰")
            .bold("‰")
    );

    characters.insert("degree".to_string(),
        CharacterSet::new()
            .simple("°")
            .icon("°")
            .bold("°")
    );

    characters.insert("radian".to_string(),
        CharacterSet::new()
            .simple("rad")
            .icon("rad")
            .bold("rad")
    );

    // 数学函数
    characters.insert("sin".to_string(),
        CharacterSet::new()
            .simple("sin")
            .icon("sin")
            .bold("sin")
    );

    characters.insert("cos".to_string(),
        CharacterSet::new()
            .simple("cos")
            .icon("cos")
            .bold("cos")
    );

    characters.insert("tan".to_string(),
        CharacterSet::new()
            .simple("tan")
            .icon("tan")
            .bold("tan")
    );

    characters.insert("log".to_string(),
        CharacterSet::new()
            .simple("log")
            .icon("log")
            .bold("log")
    );

    characters.insert("ln".to_string(),
        CharacterSet::new()
            .simple("ln")
            .icon("ln")
            .bold("ln")
    );

    characters.insert("exp".to_string(),
        CharacterSet::new()
            .simple("eˣ")
            .icon("eˣ")
            .bold("eˣ")
    );

    // 向量和矩阵
    characters.insert("vector".to_string(),
        CharacterSet::new()
            .simple("→")
            .icon("→")
            .bold("→")
    );

    characters.insert("dot_product".to_string(),
        CharacterSet::new()
            .simple("·")
            .icon("·")
            .bold("·")
    );

    characters.insert("cross_product".to_string(),
        CharacterSet::new()
            .simple("×")
            .icon("×")
            .bold("×")
    );

    characters.insert("matrix".to_string(),
        CharacterSet::new()
            .simple("[]")
            .icon("[]")
            .bold("[]")
    );

    characters.insert("determinant".to_string(),
        CharacterSet::new()
            .simple("|A|")
            .icon("|A|")
            .bold("|A|")
    );

    // 概率和组合
    characters.insert("probability".to_string(),
        CharacterSet::new()
            .simple("P")
            .icon("P")
            .bold("P")
    );

    characters.insert("combination".to_string(),
        CharacterSet::new()
            .simple("C")
            .icon("C")
            .bold("C")
    );

    characters.insert("permutation".to_string(),
        CharacterSet::new()
            .simple("P")
            .icon("P")
            .bold("P")
    );

    characters.insert("binomial".to_string(),
        CharacterSet::new()
            .simple("(n,k)")
            .icon("(n,k)")
            .bold("(n,k)")
    );

    characters
}
